package com.yzt.zhuju.network.utlis;


import com.yzt.zhuju.network.HttpRequestCallback;
import com.yzt.zhuju.network.IHttpRequest;

import java.io.File;
import java.util.List;
import java.util.TreeMap;

import rx.Observable;

/**
 * User: fish
 * E-mail: 709913163@qq.com
 * Date: 2022/11/30
 * Time: 15:08
 * describe:
 */
public class HttpUtils {

    private static IHttpRequest mHttpRequest;

    /**
     * 生成唯一实例
     */
    private static volatile HttpUtils mInstance;

    public static HttpUtils getInstance(){
        if (mInstance==null){
            synchronized (HttpUtils.class){
                if (mInstance==null){
                    mInstance = new HttpUtils();
                }
            }
        }
        return mInstance;
    }

    /**
     * 初始化决定使用哪一套网络请求框架
     * @param httpRequest  默认为OkHttp + retrofit + rxJava
     */
    public static void setInitHttpRequest(IHttpRequest httpRequest){
        mHttpRequest = httpRequest;
    }

    /**
     * 更换使用的框架
     * @param httpRequest  重新设置的网络框架
     * @return
     */
    public HttpUtils httpRequest(IHttpRequest httpRequest){
        mHttpRequest = httpRequest;
        return this;
    }

    /**
     * http请求
     * @param callBack   结果返回接口
     */
    public void executeHttp(Observable observable, HttpRequestCallback callBack){
        mHttpRequest.mHttpRequest(observable, callBack);
    }

    /**
     * 单文件上传
     * @param api        请求的api
     * @param file       上传的文件
     * @param fileKey    上传的文件对应的key
     * @param map        请求的参数
     * @param callBack   结果返回接口
     */
    public void executeFile(String api, File file, String fileKey, TreeMap map, HttpRequestCallback callBack){
        mHttpRequest.mHttpFile(api, file, fileKey, map , callBack);
    }

    /**
     * 多文件上传
     * @param api         请求的api
     * @param list        上传的文件集合
     * @param fileList    上传的文件集合对应的key
     * @param map         请求的参数
     * @param callBack    结果返回接口
     */
    public void executeMultiFile(String api, List<File> list, List<String> fileList, TreeMap map, HttpRequestCallback callBack){
        mHttpRequest.mHttpMultiFile(api, list, fileList, map, callBack);
    }
}
